package router

import (
	"api-gateway/handler/doctor"
	"api-gateway/middleware"

	"github.com/gin-gonic/gin"
)

// SetupDoctorRoutes 配置医生端路由
// 包含医生注册、登录、资质审核、排班管理、接诊、处方管理等功能
func SetupDoctorRoutes(r *gin.Engine) {
	
	// ==================== 医生端公开接口（不需要认证） ====================
	
	// 医生认证相关
	doctorPublic := r.Group("/api/doctor")
	{
		doctorPublic.POST("/register", doctor.Register)    // 医生注册
		doctorPublic.POST("/login", doctor.Login)          // 医生登录
	}

	// ==================== 医生端需要认证的接口 ====================
	// 使用医生端认证中间件，验证医生身份
	doctorAuth := r.Group("/api/doctor")
	doctorAuth.Use(middleware.DoctorAuthToken()) // 医生认证中间件
	{
		// ========== 基础信息管理 ==========
		doctorAuth.POST("/logout", doctor.Logout)          // 医生登出
		doctorAuth.GET("/info", doctor.GetInfo)            // 获取医生信息
		doctorAuth.PUT("/info", doctor.UpdateInfo)         // 更新医生信息

		// ========== 资质管理 ==========
		// 医生需要上传执业证、资格证等资质文件，通过平台审核后才能接诊
		doctorAuth.POST("/qualification", doctor.UploadQualification)      // 上传资质证书
		doctorAuth.GET("/audit/status", doctor.GetAuditStatus)             // 获取审核状态
		doctorAuth.PUT("/qualification", doctor.UpdateQualification)       // 更新资质信息

		// ========== 排班管理 ==========
		// 医生设置自己的出诊时间，患者可以根据排班进行预约
		schedule := doctorAuth.Group("/schedule")
		{
			schedule.GET("/list", doctor.GetScheduleList)              // 获取排班列表
			schedule.POST("/create", doctor.CreateSchedule)            // 创建排班
			schedule.PUT("/update/:id", doctor.UpdateSchedule)         // 更新排班
			schedule.DELETE("/delete/:id", doctor.DeleteSchedule)      // 删除排班
			schedule.GET("/:id", doctor.GetScheduleDetail)             // 排班详情
		}

		// ========== 预约管理 ==========
		// 处理患者的预约挂号请求
		appointment := doctorAuth.Group("/appointment")
		{
			appointment.GET("/list", doctor.GetAppointmentList)                // 获取预约列表
			appointment.GET("/:id", doctor.GetAppointmentDetail)               // 预约详情
			appointment.PUT("/:id/accept", doctor.AcceptAppointment)           // 接受预约
			appointment.PUT("/:id/reject", doctor.RejectAppointment)           // 拒绝预约
			appointment.PUT("/:id/complete", doctor.CompleteAppointment)       // 完成预约
		}

		// ========== 问诊管理 ==========
		// 处理患者的在线问诊请求，支持图文、电话、视频问诊
		consultation := doctorAuth.Group("/consultation")
		{
			// --- 问诊订单管理 ---
			consultation.GET("/list", doctor.GetConsultationList)              // 获取问诊列表
			consultation.GET("/:id", doctor.GetConsultationDetail)             // 问诊详情
			consultation.PUT("/:id/accept", doctor.AcceptConsultation)         // 接受问诊
			consultation.PUT("/:id/reject", doctor.RejectConsultation)         // 拒绝问诊
			consultation.PUT("/:id/complete", doctor.CompleteConsultation)     // 完成问诊

			// --- 问诊会话 ---
			consultation.POST("/:id/message", doctor.SendMessage)              // 发送消息（给患者回复）
			consultation.GET("/:id/messages", doctor.GetMessages)              // 获取消息列表
		}

		// ========== 处方管理 ==========
		// 医生在问诊后可以开具电子处方，也可以处理患者的开药申请
		prescription := doctorAuth.Group("/prescription")
		{
			// --- 处方CRUD ---
			prescription.POST("/create", doctor.CreatePrescription)            // 创建处方（问诊后开具）
			prescription.GET("/list", doctor.GetPrescriptionList)              // 获取处方列表
			prescription.GET("/:id", doctor.GetPrescriptionDetail)             // 处方详情
			prescription.PUT("/:id", doctor.UpdatePrescription)                // 更新处方
			prescription.DELETE("/:id", doctor.DeletePrescription)             // 删除处方

			// --- 开药申请处理 ---
			// 患者可以直接申请开药，医生审核后开具处方
			prescriptionRequest := prescription.Group("/request")
			{
				prescriptionRequest.GET("/list", doctor.GetPrescriptionRequestList)           // 获取开药申请列表
				prescriptionRequest.PUT("/:id/accept", doctor.AcceptPrescriptionRequest)      // 接受开药申请
				prescriptionRequest.PUT("/:id/reject", doctor.RejectPrescriptionRequest)      // 拒绝开药申请
			}
		}

		// ========== 患者管理 ==========
		// 医生可以查看自己接诊过的患者信息和历史病历
		patientManage := doctorAuth.Group("/patient")
		{
			patientManage.GET("/list", doctor.GetPatientList)              // 获取患者列表（我的患者）
			patientManage.GET("/:id", doctor.GetPatientDetail)             // 患者详情
			patientManage.GET("/:id/history", doctor.GetPatientHistory)    // 患者病历历史
		}

		// ========== 统计数据 ==========
		// 医生工作台数据统计，包括收入、接诊量等
		statistics := doctorAuth.Group("/statistics")
		{
			statistics.GET("/dashboard", doctor.GetDashboard)                    // 获取工作台数据（今日预约、待接诊等）
			statistics.GET("/income", doctor.GetIncomeStatistics)                // 收入统计（按日、月、年）
			statistics.GET("/consultation", doctor.GetConsultationStatistics)    // 问诊量统计
			statistics.GET("/patient", doctor.GetPatientStatistics)              // 患者统计（新增患者、回访患者等）
		}
	}
}

